package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOCorrelativoDocumento;
import pe.com.cotelasa.scp.dominio.service.IServicioCorrelativoDocumento;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.CorrelativoDocumento;

/**
 *
 * @author usuario
 */
@Service
public class ServicioCorrelativoDocumentoImpl implements IServicioCorrelativoDocumento, Serializable {

    private static final long serialVersionUID = -3899534497036527682L;
    @Inject
    private IDAOCorrelativoDocumento daoCorrelativoDocumento;

    @Override
    public Collection<CorrelativoDocumento> listarCorrelativoDocumentosActivos() throws ServiceException {
        try {
            return daoCorrelativoDocumento.listarActivos(CorrelativoDocumento.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<CorrelativoDocumento> listarTodosCorrelativoDocumentos() throws ServiceException {
        try {
            return daoCorrelativoDocumento.listarTodos(CorrelativoDocumento.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio guardarCorrelativoDocumento(CorrelativoDocumento correlativoDocumento) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //correlativoDocumento.setId(5);
            correlativoDocumento.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoCorrelativoDocumento.insertar(correlativoDocumento);
        } catch (DAOException ex) {
            ex.printStackTrace();
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio.setMensaje("Ocurrio un problema al tratar de guardar el correlativoDocumento.");
            Logger.getLogger(ServicioCorrelativoDocumentoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public CorrelativoDocumento conseguirCorrelativoDocumentoPorId(Integer idCorrelativoDocumento) throws ServiceException {
        try {
            return daoCorrelativoDocumento.obtenerEntidadPorId(CorrelativoDocumento.class, idCorrelativoDocumento);
        } catch (DAOException ex) {
            Logger.getLogger(ServicioCorrelativoDocumentoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public ResultadoServicio actualizarCorrelativoDocumento(CorrelativoDocumento correlativoDocumento) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoCorrelativoDocumento.actualizar(correlativoDocumento);
        } catch (DAOException ex) {
            ex.printStackTrace();
            Logger.getLogger(ServicioCorrelativoDocumentoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public CorrelativoDocumento obtenerCorrelativoDocumentoPorAnio(CorrelativoDocumento correlativo) throws ServiceException {
        try {
            return daoCorrelativoDocumento.obtenerCorrelativoDocumentoPorAnio(correlativo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<CorrelativoDocumento> listarCorrelativoPorDocumentoYSede(CorrelativoDocumento correlativoDocumento) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idsede", correlativoDocumento.getIdsede().getId());
            parametro.put("idTipoDocumento", correlativoDocumento.getIdTipoDocumento().getId());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoCorrelativoDocumento.obtenerColeccionEntidadPorFiltros(CorrelativoDocumento.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public CorrelativoDocumento obtenerCorrelativoDocumentoPorAnio2(CorrelativoDocumento correlativo) throws ServiceException {
        try {
            return daoCorrelativoDocumento.obtenerCorrelativoDocumentoPorAnio2(correlativo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public CorrelativoDocumento obtenerCorrelativoTipoDocSede(int idtipodoc, int idsede) throws ServiceException {
        try {
            return daoCorrelativoDocumento.obtenerCorrelativoTipoDocSede(idtipodoc, idsede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public CorrelativoDocumento obtenerCorrelativoTipoDocSede1(CorrelativoDocumento correlativo) throws ServiceException {
        try {
            return daoCorrelativoDocumento.obtenerCorrelativoTipoDocSede1(correlativo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<String> obtenerSeriePorDoc(int idtipodoc, int idEmpresa) throws ServiceException {
        try {
            return daoCorrelativoDocumento.obtenerSeriePorTipoDoc(idtipodoc, idEmpresa);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
